package com.dp.client.views.clientes;

import java.util.ArrayList;
import java.util.List;

import com.dp.client.dto.PaqueteDTO;
import com.dp.client.servicios.MapaStatic.IServiciosMapaStatic;
import com.dp.client.servicios.MapaStatic.IServiciosMapaStaticAsync;
import com.dp.client.util.Alerts;
import com.google.gwt.cell.client.ButtonCell;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.DataGrid;
import com.google.gwt.user.cellview.client.SimplePager;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.ListDataProvider;

public class TablaPaqueteCliente extends Composite {
	private PaqueteClienteBusqueda padre;
	private DataGrid<PaqueteDTO> dataGrid;
	SimplePager pager;
	ListDataProvider<PaqueteDTO> provider;
	
	public TablaPaqueteCliente(PaqueteClienteBusqueda paqueteClienteBusqueda) {
		this.padre = paqueteClienteBusqueda;
		dataGrid = new DataGrid<PaqueteDTO>();
		//initWidget(dataGrid);
		
		
		TextColumn<PaqueteDTO> columna_codigo= new TextColumn<PaqueteDTO>(){

			@Override
			public String getValue(PaqueteDTO object) {
				return object.getCodigo();
			}
		};
		dataGrid.addColumn(columna_codigo,"Codigo");
		
		TextColumn<PaqueteDTO> columna_Origen= new TextColumn<PaqueteDTO>(){

			@Override
			public String getValue(PaqueteDTO object) {
				return object.nombAlmacenOrigen;
			}
		};
		dataGrid.addColumn(columna_Origen,"Origen");

		TextColumn<PaqueteDTO> columna_Destino= new TextColumn<PaqueteDTO>(){

			@Override
			public String getValue(PaqueteDTO object) {
				return object.nombAlmacenDestino;
			}
		};
		dataGrid.addColumn(columna_Destino,"Destino");
		
		TextColumn<PaqueteDTO> columna_UbicacionActual= new TextColumn<PaqueteDTO>(){

			@Override
			public String getValue(PaqueteDTO object) {
				return object.getUbicacion();
			}
		};
		dataGrid.addColumn(columna_UbicacionActual,"Ubicacion");

		
		TextColumn<PaqueteDTO> columna_EstimadaLlegada= new TextColumn<PaqueteDTO>(){

			@Override
			public String getValue(PaqueteDTO object) {
				return object.getFechaEstimadaLlegada()+"";
			}
		};
		dataGrid.addColumn(columna_EstimadaLlegada,"Fecha Estimada");
		/*
		TextColumn<PaqueteDTO> columna_LlegadaReal= new TextColumn<PaqueteDTO>(){

			@Override
			public String getValue(PaqueteDTO object) {
				return object.getFechaRealLlegada()==null ? " ":object.getFechaRealLlegada()+" ";
			}
		};
		dataGrid.addColumn(columna_LlegadaReal,"Fecha Real");
		*/
		TextColumn<PaqueteDTO> columna_tipoEnvio= new TextColumn<PaqueteDTO>(){

			@Override
			public String getValue(PaqueteDTO object) {
				String msg="Receptor";
				if (object.clienteRemitente == padre.cliente.getId())
					msg="Emisor";
				return msg;	
			}
		};
		dataGrid.addColumn(columna_tipoEnvio,"Tipo");
		
		ButtonCell boton = new ButtonCell();
		Column< PaqueteDTO, String> columna_ubicar = new Column<PaqueteDTO, String>(boton) {
			@Override
			public String getValue(PaqueteDTO object) {
				return "Ubicacion";
			}
		};
		dataGrid.addColumn( columna_ubicar , "Ubicar" );
		columna_ubicar.setFieldUpdater( new FieldUpdater<PaqueteDTO, String>() {
			@Override
			public void update(int index, PaqueteDTO object, String value) {
				ubicar(object);
			}
		});
		
		provider = new ListDataProvider<PaqueteDTO> ();
		provider.addDataDisplay(dataGrid);
		pager = new SimplePager();
		pager.setWidth("100%");
		VerticalPanel vertical = new VerticalPanel();
		vertical.setSize("100%", "100%");
		initWidget(vertical);
		dataGrid.setSize("800px", "400px");
		vertical.add(pager);
		vertical.add(dataGrid);
		pager.setDisplay(dataGrid);
		pager.setPageSize(8);
	}

	protected void ubicar(final PaqueteDTO object) {
		if (object.getPlanDeVuelo()<0){
			Alerts.crearAlerta("El paquete no tiene plan de vuelo");
			return;
		}
		IServiciosMapaStaticAsync serviciosMapaStatic = GWT.create(IServiciosMapaStatic.class);
		serviciosMapaStatic.getRutaPlanVuelo(object.planDeVuelo, new AsyncCallback<String>(){
			@Override
			public void onSuccess(String url) {
				RutaPaqueteDialog rutaPaqueteDialog = new RutaPaqueteDialog(url,object.getPlanDeVuelo());
				rutaPaqueteDialog.center();
				rutaPaqueteDialog.show();
			}
			@Override
			public void onFailure(Throwable caught) {
				Alerts.dialogErrorConexion();
			}
		});
	}

	public void setData(List<PaqueteDTO> result) {
		//dataGrid.setRowData(result);
		provider.setList(result);
	}
	
	public void clearData(){
		List< PaqueteDTO > nuevo = new ArrayList< PaqueteDTO >();
		dataGrid.setRowData( nuevo );
	}
}
